<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>类型兼容性</title>
  <style>
    div, p, li {
      line-height: 40px
    }
    span {
      color: red
    }
  </style>
</head>
<body>
  <h3>symbols类型时ECMAScript 2015起创建的一个原生类型。通过Symbols构造函数创建</h3>
  <h3>Symbols类型的值不可改变且唯一</h3>
  <h2>
    迭代器与生成器
  </h2>
  <ul>
    <li>
      当一个对象实现了Symbol.iterator属性的时候，我们认为是可以迭代的,一些内置对象Array，Map，Set，String，等都已经实现了各自的Symbol.iterator。
    </li>
    <li>
      对象上的Symbols.iterator函数负责返回<span>迭代的值</span>
    </li>
    <li>
        for..of会遍历可迭代的对象，调用对象上的Symbol.iterator方法
    </li>
    <li>
      for...in迭代的是对象的键，而for...of迭代的是对象的值
    </li>
  </ul>

  <h2>实战指南-生成器</h2>
  <ul>
    <li>function*用来创建 generator 函数的语法。generator 在 MDN 文档中称为生成器</li>
    <li>
      调用 generator函数时候回返回一个 generator对象。generator 遵循迭代器接口。即通常所见到的 next、return、throw 函数
    </li>
    <li>
      generator用于创建迭代器（node 环境中运行 ts-node index.ts 会报错 Cannot find global type 'IterableIterator'，暂未发现原因）
    </li>
  </ul>
</body>
</html>